' 6-Tris++ - Six player tetris with bells and whistles by James Daniels '96/97
'
' METHOD ROTATE DROP LEFT RIGHT
' KEYS 1 s z l-alt l-amiga
' KEYS 2 return r-shift r-amiga r-alt
' JOYS up or fire down left right
'
' To do: - Show where blocks will land when dropped
' - Make smoother
' - Make speed machine independent
' Tidy-up
Trap Screen Close 0
Hide On
Track Loop On
Led Off
Track Play 3
If Prg State=-1
Break Off
End If
Global TIMESLOADED,MULTIPLAYERGAMESPLAYED,TRADITIONALGAMESPLAYED,HISCORE
If Exist("S:6-Tris.Dat")
Open In 1,"S:6-Tris.Dat"
Input #1,TIMESLOADED
Input #1,MULTIPLAYERGAMESPLAYED
Input #1,TRADITIONALGAMESPLAYED
Input #1,HISCORE
Close 1
Else
TIMESLOADED=0
MULTIPLAYERGAMESPLAYED=0
TRADITIONALGAMESPLAYED=0
HISCORE=0
End If
Inc TIMESLOADED
' Graphics setup
Erase 1
Screen Open 1,640,64,4,Hires+Laced
Screen Hide 1
Curs Off
Flash Off
Cls 0
Palette $0,$0,$0,$0
D1=Logbase(0)
D2=Logbase(1)
Screen Display 1,,139,,
Unpack 11 To 0
Screen Hide 0
S=Logbase(0)
Copy S,S+4320 To D1
Copy S+4800,S+9120 To D2
Screen Close 0
Screen Show 1
Wait Vbl
Fade 4,$0,$FFF,$0,$FFF
FINTIM=Timer+200
Unpack 10 To 0
Screen Hide 0
Global NNN
NNN=0
_GT[249,187,276,192]
For X=1 To 317 Step 4
_GT[X,181,X+3,186]
Next
For X=277 To 317 Step 4
_GT[X,187,X+3,192]
Next
_GT[0,0,54,123]
_GT[97,71,134,76]
_GT[97,77,135,106]
_GT[55,107,104,121]
_GT[137,0,279,102]
_GT[280,0,316,64]
_GT[280,64,319,124]
_GT[105,107,147,124]
_GT[148,108,226,123]
For Y=124 To 158 Step 17
_GT[0,Y,129,Y+15]
_GT[130,Y,259,Y+15]
Next
_GT[0,187,115,201]
_GT[0,202,115,216]
_GT[262,110,278,174]
For X=55 To 90 Step 7
_GT[X,0,X+6,102]
Next
For X=97 To 127 Step 5
For Y=0 To 25 Step 5
_GT[X,Y,X+5,Y+5]
Next
Next
For X=97 To 133 Step 4
_GT[X,65,X+3,70]
Next
For Y=33 To 58 Step 5
_GT[96,Y,136,Y+4]
Next
Dim _SCORE(5),_BLOCKS(999),_NEXTBLOCK(5),_BLOCKDATAX(6,3),_BLOCKDATAY(6,3),_CHECKPOINTSX(6,3,3),_CHECKPOINTSY(6,3,3),_DELAY(5)
Dim _BLOCKAX(5),_BLOCKY(5),_BLOCKX(5),_BLOCKR(5),_BLOCKT(5),_BLOCKYS(5),_MODE(5),_REMOVINGLINE(5,3),_ALIVE(5),_PREVADD(5),_PREVROTATE(5),_LEVEL(5)
Global _SCORE(),_NEXTBLOCK(),_BLOCKS(),_BLOCKDATAX(),_BLOCKDATAY(),_BLOCKAX(),_BLOCKY(),_BLOCKX(),_BLOCKR(),_BLOCKT(),_BLOCKYS(),_PREVADD(),_ALIVE(),ADX,ADY,_MODE,_DELAY
_MODE=1
For Z=0 To 5
_DELAY(Z)=0
_LEVEL(Z)=0
_PREVROTATE=0
_SCORE(Z)=0
_NEXTBLOCK(Z)=-1
_MODE(Z)=0
_ALIVE(Z)=0
_PREVADD(Z)=0
Next
'alive: 1=alive, 0=dead (waiting to start), -1=dead (no restart)
'modes: 0=standard (falling block) >0=fading line (removingline(player,lineno)) <0=fading in block
Restore BLOCKSDAT
For A=0 To 6
For B=0 To 3
Read _BLOCKDATAX(A,B)
Read _BLOCKDATAY(A,B)
Next
Next
For Z=0 To 999
_BLOCKS(Z)=Rnd(6)
Next
Degree
For B=0 To 6
Cls 0
For R=0 To 3
D#=(R*360)/16
For P=0 To 3
X=_BLOCKDATAX(B,P)+2
Y=_BLOCKDATAY(B,P)+2
If R>0
DIST#=Sqr((X*X)+(Y*Y))
If DIST#<>0
ANGLE#=Asin(-Y/DIST#)
If X>0
If Y<0
ANGLE#=-180-ANGLE#
Else
ANGLE#=180-ANGLE#
End If
End If
ANGLE#=(ANGLE#-D#)+180
End If
NX#=(Cos(ANGLE#)*DIST#)
NY#=(Sin(ANGLE#)*DIST#)
If NX#-Int(NX#)=>0.5
NNX=NX#+1
Else
NNX=NX#
End If
If NY#-Int(NY#)=>0.5
NNY=NY#+1
Else
NNY=NY#
End If
Paste Bob 5+NNX,5+NNY+(17*R),119+(B*6)+R
Paste Bob 22+NNY,5-NNX+(17*R),119+(B*6)+R
Paste Bob 39-NNX,5-NNY+(17*R),119+(B*6)+R
Paste Bob 56-NNY,5+NNX+(17*R),119+(B*6)+R
Else
Paste Bob 5+X,5+Y,119+(B*6)
Paste Bob 22+Y,5-X,119+(B*6)
Paste Bob 39-X,5-Y,119+(B*6)
Paste Bob 56-Y,5+X,119+(B*6)
_CHECKPOINTSX(B,0,P)=(5+X)+1
_CHECKPOINTSY(B,0,P)=(5+Y)+3
_CHECKPOINTSX(B,1,P)=(5-Y)+1
_CHECKPOINTSY(B,1,P)=(5+X)+3
_CHECKPOINTSX(B,2,P)=(5-X)+1
_CHECKPOINTSY(B,2,P)=(5-Y)+3
_CHECKPOINTSX(B,3,P)=(5+Y)+1
_CHECKPOINTSY(B,3,P)=(5-X)+3
End If
Next
Next
For X=0 To 3
For Y=0 To 3
_GT[X*17,Y*17,(X*17)+16,(Y*17)+16]
Next
Next
Next
For B=0 To 6
Cls 0
For X=0 To 9
Paste Bob(X*4)-1,-1,119+(B*6)
Next
_GT[0,0,40,4]
Next
Make Mask
Screen 1
While Timer<FINTIM
Led Off
Wait Vbl
Wend
Fade 4,$0,$0,$FFF,$FFF
FINTIM=Timer+200
Screen 0
Cls 0
N=30
For Y=0 To 255 Step 2
For X=0 To 170
N=(Rnd(4)+29+N)/2
Extension_12_0394 X,Y,N
Next
Next
_GT[0,0,171,256]
Screen 1
While Timer<FINTIM
Led Off
Wait Vbl
Wend
Fade 4,$0,$0,$0,$0
FINTIM=Timer+60
Screen 0
Cls 0
N=0
For Y=0 To 132 Step 132
For X=1 To 117 Step 58
Paste Bob X,Y,93
Paste Bob X-1,Y,111+N
Inc N
Next
Next
Paste Bob 210,108,101
_UPDATEGAMEMODE
Paste Bob 178,0,97
ADX=11
ADY=0
For Z=0 To 5
_DOSCORE[Z]
_ADDNEWBLOCK[Z]
Paste Bob ADX+2,ADY+15,98
Add ADX,58
If ADX>127
ADX=11
ADY=132
End If
Next
Paste Bob 276,126,1
While Timer<FINTIM
Led Off
Wait Vbl
Wend
Screen Close 1
Screen Open 1,320,256,32,Lowres
Screen Hide 1
Flash Off
Curs Off
For Z=0 To 31
Colour Z,$0
Next
Screen Copy 0 To 1
Double Buffer
Autoback 0
Bob Update Off
Screen Show 1
Fade 1 To -1
_CURRSCORE=0
Timer=0
SCY=42
SCYS=0
POKAY=1
PPOKAY=1
_DELAY=0
_COPYALL=0
_UPDATEHIGHSCORE=1
Screen 0
For Z=0 To 6 Step 2
Sprite Z,320+(Z*15),233,110
N$="S: I Y>YH(0,256) J I L Y=Y+3 ; I: L R0=V("+Right$(Str$(Z/2),1)+") ; I R0=0 J L ; L Y=YH(0,256-R0) ; L: P ; J S"